import pymysql
from config.settings import DB_CONFIG
from utils.logutil import logger


class MysqlUtil:

    def __init__(self):
        # 读取配置文件，初始化pymsql数据库连接
        self.db = pymysql.connect(**DB_CONFIG)
        # 创建数据库游标
        self.cursor = self.db.cursor(cursor=pymysql.cursors.DictCursor)

    # 获取单条数据
    def get_fetchone(self, sql):
        self.cursor.execute(sql)
        return self.cursor.fetchone()

    # 获取多条数据
    def get_fetchall(self, sql):
        # 执行sql
        self.cursor.execute(sql)
        # 查询多条数据，结果返回
        return self.cursor.fetchall()

    def get_gaojing_fetchall(self, sql):
        try:
            if self.db and self.cursor:
                self.cursor.fetchall(sql)

        except Exception as e:
            self.db.rollback()


    #
    def sql_execute(self, sql):
        try:
            # db对象和游标对象同时存在
            if self.db and self.cursor:
                self.cursor.execute(sql)
                self.db.commit()

        except Exception as e:
            # 回滚操作
            self.db.rollback()
            logger.error("sql语句执行错误,已执行回滚操作")
            return False

    # staticmethod  静态方法，可以直接使用  类名.静态方法
    @staticmethod
    def close(self):
        # 判断游标对象是否存在
        if self.cursor is not None:
            self.cursor.close()

        # 判断数据库对象是否存在
        if self.db is not None:
            self.db.close()


